Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 skin-theme-clientpref-day vector-sticky-header-enabled" lang="de" dir="ltr"><head>
<meta charset="UTF-8">
<title>Iterative Programmierung</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://de.wikipedia.org/wiki/Iterative_Programmierung"> <link href="./_mw_/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link href="./_mw_/ext.gadget.citeRef.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.defaultPlainlinks.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonHide.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonLayout.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonStyle.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiDarkmode.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiResponsive.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.specialSearch.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Iterative_Programmierung rootpage-Iterative_Programmierung skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Iterative Programmierung</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="de" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="de" dir="ltr"><p>Die <b>iterative Programmierung</b> (von <i><a href="Latein" title="Latein">lat.</a></i> iterare = wiederholen) ist ein Konzept, bei dem mehrfach auszuführende Arbeitsschritte in <a href="Schleife_(Programmierung)" title="Schleife (Programmierung)">Schleifen</a> (Wiederholungen von <a href="Anweisung_(Programmierung)" title="Anweisung (Programmierung)">Anweisungen</a> oder Anweisungsfolgen) umgesetzt werden.
</p>

<div class="mw-heading mw-heading2"><h2 id="Abgrenzung">Abgrenzung</h2></div>
<p>Andere Programmierkonzepte sind
</p>
<ul><li>die <a href="Rekursive_Programmierung" title="Rekursive Programmierung">rekursive Programmierung</a>, die für mehrfach auszuführende Arbeitsschritte <a href="Rekursion" title="Rekursion">Rekursion</a> verwendet (wiederholte Selbstaufrufe eines Programmteils); prinzipiell lassen sich rekursive <a href="Algorithmus" title="Algorithmus">Algorithmen</a> auch iterativ implementieren und umgekehrt.</li>
<li>die <a href="Logische_Programmierung" title="Logische Programmierung">logische Programmierung</a>, die Lösungen für Probleme nicht über Anweisungsfolgen findet, sondern durch regelbasierte logische Folgerung.</li></ul>
<div class="mw-heading mw-heading3"><h3 id="Gegenüberstellung"><span id="Gegen.C3.BCberstellung"></span>Gegenüberstellung</h3></div>
<p>In der Literatur werden Funktionen gerne im <a href="Rekursive_Programmierung" title="Rekursive Programmierung">rekursiven Programmierstil</a> vorgestellt, die meist als einfacher zu verstehen gelten. Bei <a href="Rekursive_Programmierung" title="Rekursive Programmierung">rekursiver Programmierung</a> wird die Wiederholung erreicht, ohne dass das Programm explizite Schleifen enthält.<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> Anstatt Schleifenkontrollanweisungen enthält das Programm sogenannte (direkte) Selbstaufrufe der betreffenden Funktion oder auch indirekte gegenseitige Aufrufe mehrerer Funktionen untereinander. In beiden Fällen, iterativer wie rekursiver Programmierung, bedarf es normalerweise einer expliziten <a href="Abbruchbedingung" title="Abbruchbedingung">Abbruchbedingung</a>, die eine <a href="Terminiertheit" title="Terminiertheit">Terminierung</a> des Programms erzwingt, wobei Fehler in derselben zu unbeabsichtigten <a href="Endlosschleife_(Programmierung)" title="Endlosschleife (Programmierung)">Endlosschleifen</a> führen können.
</p><p>Iterative Implementierungen bieten oft Vorteile:
</p>
<ul><li>Bei iterativer Programmierung kann der Speicherbedarf schärfer durch den Programmierer zugeschnitten und kontrolliert werden, wogegen bei rekursiver normalerweise bei jedem Selbstaufruf der Kontext der aufrufenden Prozedur (im Programm-<a href="Stapelspeicher" title="Stapelspeicher">Stapelspeicher</a>) zu retten ist, damit er beim <a href="R%C3%BCcksprung" class="mw-redirect" title="Rücksprung">Rücksprung</a> wieder hergestellt werden kann.<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup></li>
<li>Darüber hinaus ist der Speicherbedarf für den Programm-Stapelspeicher programmiersprachlich schwer oder gar nicht kontrollierbar. Auch die Anzahl der Wiederholungen (resp. Selbstaufrufe) ist bei rekursiver Programmierung manchmal weniger deutlich erkennbar. Beide Probleme mögen zu den berüchtigten <a href="Stapel%C3%BCberlauf" title="Stapelüberlauf">Stapelüberläufen</a> beitragen.</li>
<li>Im rekursiven Programmierstil lassen sich manche Szenarien nur durch eine sogenannte <a href="R%C3%BCckruffunktion" title="Rückruffunktion">Rückruffunktion</a> (<span style="font-style:normal;font-weight:normal"><a href="Englische_Sprache" title="Englische Sprache">englisch</a></span> <span lang="en-Latn" style="font-style:italic"><i>callback function</i></span>) realisieren. Beispielsweise wird bei einer rekursiv programmierten <a href="Bin%C3%A4rbaum#Traversierung" title="Binärbaum">Traversierfunktion</a> eines <a href="Bin%C3%A4rbaum" title="Binärbaum">Binärbaums</a> dieser stets in seiner Gänze durchlaufen und die Nutzfunktion in einem Rückruf implementiert.<br>Im Gegensatz dazu kann bei iterativer Programmierung das zu bearbeitende Segment des Baums durch eine <a href="Bin%C3%A4rer_Suchbaum#Suchen" title="Binärer Suchbaum">Suchfunktion</a> angesteuert, die Nutzfunktion nach Belieben als flache Anweisungsfolge bzw. als Unterprogramm implementiert und nach einem <a href="Bin%C3%A4rbaum#Iterative_Implementierung" title="Binärbaum">(iterativen) Querschritt</a> beim nächsten Element wiederholt werden.<sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup></li></ul>
<p>Mit wachsender Leistungsfähigkeit der Rechner tritt jedoch die Lesbarkeit und Wartbarkeit von Software gegenüber ihrer technischen Effizienz in den Vordergrund. Wo dies der Fall ist, bietet sich der rekursive Ansatz für die Arbeit mit <a href="Baum" title="Baum">baumartigen</a> Datenstrukturen und der iterative für sequenzielle Datenstrukturen an.
</p>
<div class="mw-heading mw-heading2"><h2 id="Beispiel">Beispiel</h2></div>
<p>Ein Beispiel für die iterative Programmierung ist ein Datenbankdurchlauf (<a href="Pascal_(Programmiersprache)" title="Pascal (Programmiersprache)">Pascal</a>) durch die Datensätze („Zeilen“) von (der „Tabelle“) <code>Dataset</code>:
</p>
<div class="mw-highlight mw-highlight-lang-pascal mw-content-ltr" dir="ltr"><pre><span></span><span class="k">procedure</span><span class="w"> </span><span class="nf">Durchlauf</span><span class="o">;</span>
<span class="k">begin</span>
<span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="k">not</span><span class="w"> </span><span class="n">Dataset</span><span class="o">.</span><span class="n">Eof</span><span class="w"> </span><span class="k">do</span><span class="w"> </span><span class="err">!</span><span class="w"> </span><span class="n">wiederhole_solange</span><span class="w"> </span><span class="n">Tabelle</span><span class="w"> </span><span class="n">Dataset</span><span class="w"> </span><span class="n">nicht</span><span class="w"> </span><span class="err">„</span><span class="n">zu</span><span class="w"> </span><span class="n">Ende</span><span class="err">“</span><span class="w"> </span><span class="n">ist</span>
<span class="w"> </span><span class="k">begin</span><span class="w"> </span><span class="err">!</span><span class="w"> </span><span class="n">den</span><span class="w"> </span><span class="n">hier</span><span class="w"> </span><span class="n">beginnenden</span><span class="w"> </span><span class="n">Befehlsblock</span>
<span class="w"> </span><span class="n">Befehl1</span><span class="o">;</span>
<span class="w"> </span><span class="n">Befehl2</span><span class="o">;</span>
<span class="w"> </span><span class="n">Befehl3</span><span class="o">;</span>
<span class="w"> </span><span class="n">Dataset</span><span class="o">.</span><span class="n">Next</span><span class="o">;</span><span class="w"> </span><span class="err">!</span><span class="w"> </span><span class="n">Schalte</span><span class="w"> </span><span class="n">weiter</span><span class="w"> </span><span class="n">zum</span><span class="w"> </span><span class="n">n</span><span class="err">ä</span><span class="n">chsten</span><span class="w"> </span><span class="n">Datensatz</span><span class="w"> </span><span class="p">(</span><span class="n">n</span><span class="err">ä</span><span class="n">chste</span><span class="w"> </span><span class="err">„</span><span class="n">Zeile</span><span class="err">“</span><span class="p">)</span><span class="w"> </span><span class="n">von</span><span class="w"> </span><span class="n">Dataset</span><span class="o">.</span>
<span class="w"> </span><span class="k">end</span><span class="o">;</span>
<span class="k">end</span><span class="o">;</span>
</pre></div>
<p>Dabei werden die Befehle 1 bis 3 solange wiederholt, bis alle <a href="Datensatz" title="Datensatz">Datensätze</a> durchlaufen wurden.
</p>
<div class="mw-heading mw-heading2"><h2 id="Anmerkungen_und_Einzelnachweise">Anmerkungen und Einzelnachweise</h2></div>
<ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><a href="#cite_ref-1">↑</a></span> <span class="reference-text"> <a href="Niklaus_Wirth" title="Niklaus Wirth">Niklaus Wirth</a>: <i>Algorithmen und Datenstrukturen</i>, <a href="B._G._Teubner" class="mw-redirect" title="B. G. Teubner">B. G. Teubner</a> 1983, Seite 150</span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><a href="#cite_ref-2">↑</a></span> <span class="reference-text">Ausnahmen sind Programmiersysteme und Compiler, die Unterstützung dafür bieten, <a href="Endrekursion" title="Endrekursion">Endrekursionen</a> zu erkennen und zu optimieren.</span>
</li>
<li id="cite_note-3"><span class="mw-cite-backlink"><a href="#cite_ref-3">↑</a></span> <span class="reference-text">Siehe dazu <a href="Bin%C3%A4rbaum#Traversierung" title="Binärbaum">Traversierung</a> (mit Codebeispielen) und Ben Pfaff: <i>An Introduction to Binary Search Trees and Balanced Trees.</i> Free Software Foundation, Inc. Boston 2004, S. 47 „4.9.2 Traversal by Iteration“.</span>
</li>
</ol></div><!--htdig_noindex--><div><div class="zim-footer">
Dieser Artikel wurde von <a class="external text" title="Zuletzt bearbeitet am 2023-12-19" href="https://de.wikipedia.org/wiki/?title=Iterative_Programmierung&amp;oldid=240352374">Wikipedia</a> herausgegeben. Der Text ist unter <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de">Creative Commons Attribution-Share Alike 4.0</a> verfügbar, sofern nicht anders angegeben. Für die Mediendateien können zusätzliche Bedingungen gelten.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>

</body></html>